home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / proc / sun3.md / procMach.h < prev   
C/C++ Source or Header  |  1992-12-18  |  3KB  |  94 lines

  1. /*
  2.  * procMach.h --
  3.  *
  4.  *    The a.out format for an object file.
  5.  *
  6.  * Copyright (C) 1985, 1988 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that the above copyright
  10.  * notice appear in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  *
  15.  *
  16.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/proc/sun3.md/procMach.h,v 9.6 91/07/31 18:20:17 shirriff Exp $ SPRITE (Berkeley)
  17.  */
  18.  
  19. #ifndef _PROCMACH
  20. #define _PROCMACH
  21.  
  22. #include <sprite.h>
  23.  
  24. #define    NEW_PAGE_SIZE        0x2000
  25. #ifdef sun4
  26. #define    NEW_SEG_SIZE        0x40000
  27. #define SUN_SEG_SIZE        NEW_PAGE_SIZE
  28. #else
  29. #define    NEW_SEG_SIZE        0x20000
  30. #define SUN_SEG_SIZE        NEW_SEG_SIZE
  31. #endif
  32.  
  33. /*
  34.  * Header prepended to each a.out file.
  35.  */
  36.  
  37. typedef struct {
  38.     unsigned int    dynamic:1;    /* indicated dynamically-loaded */
  39.     unsigned int    toolversion:7;    /* tool version */
  40.     unsigned char     machineType;    /* machine type */
  41.     unsigned short     magic;        /* magic number */
  42.     unsigned long    code;        /* Size of code segment */
  43.     unsigned long    data;        /* Size of initialized data */
  44.     unsigned long    bss;        /* Size of uninitialized data */
  45.     unsigned long    syms;        /* Size of symbol table */
  46.     unsigned long    entry;        /* Entry point */
  47.     unsigned long    trsize;        /* Size of text relocation */
  48.     unsigned long    drsize;        /* Size of data relocation */
  49. } ProcExecHeader;
  50.  
  51. #define    PROC_OMAGIC    0407        /* Old impure format */
  52. #define    PROC_NMAGIC    0410        /* Read-only text */
  53. #define    PROC_ZMAGIC    0413        /* Demand load format */
  54. #define    SPRITE_ZMAGIC    0414        /* Demand load format */
  55. #define    UNIX_ZMAGIC    0415        /* Demand load format */
  56. #define PROC_MC68010    1        /* runs on '10 or '20 */
  57. #define PROC_MC68020    2        /* runs on '20 only */
  58. #define    PROC_SPARC    3        /* runs on SPARC only */
  59.  
  60. /*
  61.  * Macros which take exec structures as arguments and tell whether
  62.  * the file has a reasonable magic number or offsets to text|symbols|strings.
  63.  */
  64. #define    PROC_BAD_MAGIC_NUMBER(x) \
  65.     ((x).magic!=PROC_ZMAGIC || (x).magic!=UNIX_ZMAGIC)
  66.  
  67. #define    PROC_CODE_FILE_OFFSET(x) \
  68.     (((x).magic==PROC_ZMAGIC || (x).magic==UNIX_ZMAGIC) \
  69.         ? 0 : sizeof (ProcExecHeader))
  70.  
  71. #define    PROC_DATA_FILE_OFFSET(x) \
  72.     (PROC_CODE_FILE_OFFSET(x) + (x).code)
  73.  
  74. #define PROC_BASEADDR(x) \
  75.     (((x).magic==PROC_ZMAGIC) && ((x).entry < NEW_PAGE_SIZE) ?\
  76.     0 : NEW_PAGE_SIZE)
  77.  
  78. /*
  79.  * Macros which take exec structures as arguments and tell where the
  80.  * various pieces will be loaded.
  81.  */
  82. #define PROC_CODE_LOAD_ADDR(x) NEW_PAGE_SIZE
  83. #define PROC_DATA_LOAD_ADDR(x) \
  84.     (((x).magic==PROC_OMAGIC)? (PROC_CODE_LOAD_ADDR(x)+(x).code) \
  85.     : (NEW_SEG_SIZE+((PROC_CODE_LOAD_ADDR(x)+(x).code-1) & ~(NEW_SEG_SIZE-1))))
  86. #define PROC_BSS_LOAD_ADDR(x)  (PROC_DATA_LOAD_ADDR(x)+(x).data)
  87.  
  88. #define PROC_SUN_DATA_LOAD_ADDR(x) \
  89.     (((x).magic==PROC_OMAGIC)? (PROC_CODE_LOAD_ADDR(x)+(x).code) \
  90.     : (SUN_SEG_SIZE+((PROC_CODE_LOAD_ADDR(x)+(x).code-1) & ~(SUN_SEG_SIZE-1))))
  91.  
  92.  
  93. #endif /* _PROCMACH */
  94.